quartz: gtk-application - inhibit openFiles events from cmdline
authorFriedrich Beckmann <friedrich.beckmann@gmx.de>
Thu, 18 Jun 2020 19:08:28 +0000 (21:08 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 18 Jun 2020 20:42:54 +0000 (16:42 -0400)
When an application is started via cmdline, then openFiles events
from MacOS are generated although gtkapplication already interprets
the cmdline arguments and opens suitable arguments as files. So they
would be opened twice. Depending on the exact situation the
openFiles event can also be issued before the startup signal
is given. Depending on the application this can result in a crash
due to unexpected behaviour. I took this idea from the
gedit-app-osx.m file. Also from Jesse van den Kieboom.

See:
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/2098#note_842975
https://gitlab.gnome.org/GNOME/gtk/-/commit/a3ad7fa80f764fb7bcbe
https://gitlab.gnome.org/GNOME/gedit/-/blob/master/gedit/gedit-app-osx.m#L592

gtk/gtkapplication-quartz.c

index 90ab1705f04b16000356011cf3d1ea01f2ce2e68..d59a19b1e2c86934f0542991cdd9775444ee826d 100644 (file)
@@ -325,6 +325,13 @@ gtk_application_impl_quartz_uninhibit (GtkApplicationImpl *impl,
 static void
 gtk_application_impl_quartz_init (GtkApplicationImplQuartz *quartz)
 {
+  /* This is required so that Cocoa is not going to parse the
+     command line arguments by itself and generate OpenFile events.
+     We already parse the command line ourselves, so this is needed
+     to prevent opening files twice, etc. */
+  [[NSUserDefaults standardUserDefaults] setObject:@"NO"
+                                            forKey:@"NSTreatUnknownArgumentsAsOpen"];
+
   quartz->combined = g_menu_new ();
 }